﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.UI.Code;
using Web.Framework;
using Ubatic.Contracts.Services;
using Ubatic.ServiceFactory;
using Ubatic.Contracts.Contracts;
using Ubatic.Contracts.Enums;

namespace Ubatic.UI.App
{
    public partial class Convocatorias : System.Web.UI.Page
    {
        private const string pagDetalle = "Proyecto.aspx";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                CagarConvocatorias();
            }
        }

        private void CagarConvocatorias()
        {
            IConvocatoriaService service = Factory.GetConvocatoriaService();
            ConvocatoriaCriteriaDto criteria = new ConvocatoriaCriteriaDto();

            this.rptConvocatorias.DataSource = service.ObtenerConvocatorias(criteria);
            this.rptConvocatorias.DataBind();            
        }

        protected void Grid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                GridView grid = sender as GridView;
                long proyectoId = Convert.ToInt32(grid.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                if (e.CommandName == "ver")
                {
                    Response.Redirect(string.Format("{0}?Id={1}", pagDetalle, proyectoId));
                    //Navigation.NavigateTo(string.Format("{0}?Id={1}", pagDetalle, proyectoId));
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void rptConvocatorias_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            ConvocatoriaDto convocatoriaDto = e.Item.DataItem as ConvocatoriaDto;

            // Controles
            Label label = e.Item.FindControl("lblNombreConvocatoria") as Label;
            Panel pnlPendientes = e.Item.FindControl("pnlPendientes") as Panel;
            Panel pnlEnviados = e.Item.FindControl("pnlEnviados") as Panel;
            Panel pnlConvocatoriaCerrada = e.Item.FindControl("pnlConvocatoriaCerrada") as Panel;
            GridView gridPendientes = e.Item.FindControl("GridPendientes") as GridView;
            GridView gridEnviados = e.Item.FindControl("GridEnviados") as GridView;
            GridView gridProyectosConvocatoriaCerrada = e.Item.FindControl("GridProyectosConvocatoriaCerrada") as GridView;
            Button btnNuevoProyecto = e.Item.FindControl("btnNuevoProyecto") as Button;

            DateTime now = DateTime.Now;
            // Servicio
            IConvocatoriaService svc = Factory.GetConvocatoriaService();
            List<ProyectoDto> proyectos = svc.ObtenerProyectos(convocatoriaDto.Id);


            if(convocatoriaDto.PresentacionInicio <= now &&
                (convocatoriaDto.PresentacionFin == null || now <= convocatoriaDto.PresentacionFin))
            {
                // Abierta                
                label.Text += " Abierta";
                btnNuevoProyecto.Visible = true;
                List<ProyectoDto> pendientes = proyectos.Where(p => p.EstadoId == (int)EstadoProyectoEnum.Abierto).ToList();
                if (pendientes.Count > 0)
                {
                    pnlPendientes.Visible = true;
                    (pnlPendientes.FindControl("lblCantReg") as Label).Text = string.Format(" ({0})",pendientes.Count.ToString());
                    gridPendientes.DataSource = pendientes;
                    gridPendientes.DataBind();
                }
                List<ProyectoDto> enviados = proyectos.Where(p => p.EstadoId != (int)EstadoProyectoEnum.Abierto &&
                                                                  p.EstadoId != (int)EstadoProyectoEnum.Anulado).ToList();
                if (enviados.Count > 0)
                {
                    pnlEnviados.Visible = true;
                    (pnlEnviados.FindControl("lblCantRegEnviados") as Label).Text = string.Format(" ({0})", enviados.Count.ToString());
                    gridEnviados.DataSource = enviados;
                    gridEnviados.DataBind();
                }
            }
            else            
            {
                // Cerrada
                label.Text += " Cerrada";
                pnlConvocatoriaCerrada.Visible = true;
                gridProyectosConvocatoriaCerrada.DataSource = proyectos;
                gridProyectosConvocatoriaCerrada.DataBind();

            }



        }

        protected void rptConvocatorias_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "nuevoProyecto")
            {
                long convocatoriaId = long.Parse(e.CommandArgument.ToString());
                long usuarioId = 1;
                IConvocatoriaService svc = Factory.GetConvocatoriaService();                
                long proyectoId = svc.CrearProyectoVacio(convocatoriaId,usuarioId);
                Response.Redirect(string.Format("Proyecto.aspx?Id={0}", proyectoId));
            }

        }
    }
}